package BM_01;

import Ep02_LinkedList.ListNode;

/**
 * @author Jimmy Zhan WORKSTATION
 * @since 2023/7/11 19:09
 * 说明：双指针翻转链表，画一下就出来了，很快啊
 */

public class Mine {
    public ListNode ReverseList (ListNode head) {
        if (head == null) return null;      // 空链表
        if (head.next == null) return head; // 单节点链表
        // write code here

        ListNode pre = head;
        ListNode cur = pre.next;
        ListNode temp = null;
        // 先断开一次，避免出现循环链表
        pre.next = null;

        while(cur != null) {
            temp = cur.next;    // 记录下一个节点，因为cur要反向，它的next需要有名字不然找不到
            cur.next = pre;     // 反向
            pre = cur;          // 移动pre指针
            cur = temp;         // 移动cur指针
        }

        return pre;
    }
}
